package com.itheima.work1;

import java.util.ArrayList;

public class Test1 {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<Person> list2 = new ArrayList<>();
        ArrayList<Student> list3 = new ArrayList<>();
        ArrayList<JavaStudent> list4 = new ArrayList<>();
        ArrayList<UIStudent> list5 = new ArrayList<>();
        ArrayList<Teacher> list6 = new ArrayList<>();
        ArrayList<JavaTeacher> list7 = new ArrayList<>();
        ArrayList<UITeacher> list8 = new ArrayList<>();

        print1(list1);
        print1(list2);
        print1(list3);
        print1(list4);
        print1(list5);
        print1(list6);
        print1(list7);
        print1(list8);
        System.out.println("----------------------------------");
//      print2(list1);    报错
        print2(list2);
        print2(list3);
        print2(list4);
        print2(list5);
        print2(list6);
        print2(list7);
        print2(list8);
        System.out.println("----------------------------------");
//        print3(list1);    报错
//        print3(list2);    报错
        print3(list3);      //学生
        print3(list4);      //JAVA学生
        print3(list5);      //UI学生
//        print3(list6);    报错
//        print3(list7);    报错
//        print3(list8);    报错
        System.out.println("----------------------------------");
//        print4(list1);    报错
        print4(list2);      //人
        print4(list3);      //学生
        print4(list4);      //Java学生
//        print4(list5);    报错
//        print4(list6);    报错
//        print4(list7);    报错
//        print4(list8);    报错

    }


    //要求：参数可以接收任何泛型的ArrayList参数
    public static void print1(ArrayList<?> list){
        System.out.println("print1");
    }
    //要求：参数可以接收任何Person及其子类泛型的ArrayList参数
    public static void print2(ArrayList<?extends Person> list){
        System.out.println("print2");
    }
    //要求：参数可以接收任何Student及其子类泛型的ArrayList参数
    public static void print3(ArrayList<?extends Student> list){
        System.out.println("print3");
    }
    //要求：参数可以接收任何Java学员，及其父类泛型的ArrayList参数
    public static void print4(ArrayList<? super JavaStudent> list){
        System.out.println("prin41");
    }
}
